﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using System.Collections;
using DTO;


namespace QuanLyNhaSach_1173005
{
    public partial class frmHoaDonBanSach : Form
    {
        HoaDonDTO hoadon;
       Hashtable htSachChon;

       public void KTLoi()
       {
           //MessageBox.Show(dtgv_HienThiSach.Rows.Count.ToString());
           int flag = 1;
           for (int i = 0; i < dtgv_HienThiSach.Rows.Count; i++)
           {
               if (dtgv_HienThiSach.Rows[i].DefaultCellStyle.BackColor == Color.IndianRed)
                   flag = 0;
           }
           if (dtgv_HienThiSach.Rows.Count == 1)
               flag = 0;
           if (flag == 1)
           {
               if (btn_CapNgat.Enabled == false && btn_XoaHoaDon.Enabled == false)
                   btn_LapHoaDon.Enabled = true;
           }
           else
               btn_LapHoaDon.Enabled = false;
           if (cb_MaKhachHang.SelectedIndex == 0)
               btn_LapHoaDon.Enabled = false;
       }
        public frmHoaDonBanSach()
        {
            /*InitializeComponent();
            htSachChon = new Hashtable();
            dtp_NgayNhap.Value = DateTime.Now;
            //dtTL = KhachHangBUS.DSKhachHang();
            ArrayList arr = KhachHangBUS.LayDanhSach();
            KhachHangDTO kh = new KhachHangDTO();
            kh.MaKhachHang = " <Chọn khách hàng> ";
            arr.Insert(0, kh);
            // cb_MaKhachHang.DataSource = "<Chọn khách hàng>";
            //kh.MaKhachHang = " <Chọn khách hàng> ";
            cb_MaKhachHang.DataSource = arr;
            cb_MaKhachHang.DisplayMember = "MaKhachHang";
            cb_MaKhachHang.ValueMember = "MaKhachHang";

            this.MaSach.DataSource = SachBUS.LayDanhSach();
            this.MaSach.DisplayMember = "MaSach";
            this.MaSach.ValueMember = "MaSach";*/

            //htSachChon = new Hashtable();
            InitializeComponent();
            htSachChon = new Hashtable();
            dtp_NgayNhap.Value = DateTime.Now;
            //Load dữ liệu khách hàng vào combobox
            ArrayList arr = KhachHangBUS.LayDanhSach();
            KhachHangDTO kh = new KhachHangDTO();
            kh.MaKhachHang = " <Chọn khách hàng> ";
            arr.Insert(0, kh);
            cb_MaKhachHang.DataSource = arr;
            cb_MaKhachHang.DisplayMember = "MaKhachHang";
            cb_MaKhachHang.ValueMember = "MaKhachHang";

            //Load dữ liệu sách vào combobox nhỏ
        }

        private void btn_LapHoaDon_Click(object sender, System.EventArgs e)
        {
            // Thêm hóa đơn
            hoadon = new HoaDonDTO();
            hoadon.KhachHang = (KhachHangDTO)cb_MaKhachHang.SelectedItem;
            hoadon.MaHoaDon = "HD" + DateTime.Now.Ticks;
            hoadon.NgayLapHoaDon = dtp_NgayNhap.Value;
           // MessageBox.Show("tkngtrhbnlhnrtlnbfl" + hoadon.KhachHang.MaKhachHang);
            hoadon.TrangThai = 1;
            HoaDonBUS.ThemHoaDon(hoadon);

            float tongtien = 0;

            // Thêm chi tiết phiếu nhập
            for (int i = 0; i < dtgv_HienThiSach.RowCount - 1; i++)
            {
                ChiTietHoaDonDTO cthd = new ChiTietHoaDonDTO();
                cthd.HoaDon = hoadon;
                cthd.MaChiTietHoaDon = "CTHD" + DateTime.Now.Ticks;
                SachDTO sach = SachBUS.LayThongTinSach(dtgv_HienThiSach.Rows[i].Cells[1].Value.ToString());
                cthd.Sach = sach;
                cthd.SoLuongBan = Convert.ToInt32(dtgv_HienThiSach.Rows[i].Cells[7].Value);
                cthd.TrangThai = 1;
                cthd.DonGiaBan = sach.DonGiaBan;
                ChiTietHoaDonBUS.ThemChiTietHoaDon(cthd);
                //Cập nhật idcthd vào grid
                dtgv_HienThiSach.Rows[i].Cells[8].Value = cthd;
                // Cập nhật số lượng tồn mới của khách
                SachBUS.CapNhatSoLuongTon(sach.MaSach, (sach.SoLuongTon - cthd.SoLuongBan));

                //Tính tổng tiền
                tongtien += (sach.DonGiaBan * cthd.SoLuongBan);
            }

            //Cập nhật số tiền nợ của khách
            KhachHangBUS.CapNhatSoTienNo(hoadon.KhachHang.MaKhachHang, hoadon.KhachHang.TienNo + tongtien);

            MessageBox.Show("Hóa đơn được tạo thành công", "Quản lý nhà sách");
            btn_LapHoaDon.Enabled = false;
            btn_CapNgat.Enabled = true;
            btn_XoaHoaDon.Enabled = true;
            cb_MaKhachHang.Enabled = false;
            //Chỉ cho fép sửa số lượng nhập và xóa
            for (int i = 0; i < dtgv_HienThiSach.RowCount - 1; i++)
            {
                dtgv_HienThiSach.Rows[i].Cells[1].ReadOnly = true;
            }
        }

        private void frmHoaDonBanSach_Load(object sender, System.EventArgs e)
        {
           // InitializeComponent();
           //DataTable dtTL = new DataTable();
            //KhachHangDTO kh = new KhachHangDTO();
            
            //sdvsjvnjfsdvnl



        }

        private void cb_MaKhachHang_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            KhachHangDTO kh = (KhachHangDTO)cb_MaKhachHang.SelectedItem;
            if (kh.MaKhachHang != "< Chọn Khách Hàng>")
            {
                txt_HoTen.Text = kh.HoTenKhachHang;
                txt_SoTienNo.Text = kh.TienNo + "";
                ThamSoDTO thamso = ThamSoBUS.LayThongTinThamSo();
                float tienno = thamso.TienNoQuiDinh;
                if (kh.TienNo > tienno)//Vi phạm tiền nợ
                {
                    dtgv_HienThiSach.Enabled = false;
                    //dtgv_HienThiSach.ReadOnly = true;
                    MessageBox.Show("Số tiền nợ của khách hàng đã vượt quá qui định. Không thể mua thêm sách!!!");
                }
                else
                {
                    dtgv_HienThiSach.Enabled = true;
                    //dtgv_HienThiSach.ReadOnly = false;
                }
            }
            KTLoi();
        }

        private void dtgv_HienThiSach_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 1 && e.RowIndex >= 0)
            {
                int stt = e.RowIndex;
                if (dtgv_HienThiSach.Rows[e.RowIndex].Cells[1].Value != null)
                {

                    String maSach = dtgv_HienThiSach.Rows[e.RowIndex].Cells[1].Value.ToString();
                   // 
                    //MessageBox.Show(maSach);
                    SachDTO sach = SachBUS.LayThongTinSach(maSach);
                   // MessageBox.Show("Dau Sach Xuat hien" + maSach);
                    //SachDTO s = SachBUS.LayThongTinSach(maSach);

                    //MessageBox.Show("Thu Nghiem" + sach.TenSach);
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[0].Value = ++stt;
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[2].Value = sach.TenSach;
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[3].Value = sach.TheLoai;
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[4].Value = sach.TacGia;
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[5].Value = sach.SoLuongTon;
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[6].Value = sach.DonGiaBan;

                    //Lấy số lượng tồn qui định
                    int slton = ThamSoBUS.LayThongTinThamSo().SoLuongTonQuiDinhBan;

                    //Tô màu và ko cho nhập đầu sách có tồn ít hơn số lượng tồn qui định
                    if (sach.SoLuongTon <= slton)
                    {
                        dtgv_HienThiSach.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.IndianRed;
                        dtgv_HienThiSach.Rows[e.RowIndex].Cells[7].ReadOnly = true;
                        dtgv_HienThiSach.Rows[e.RowIndex].Cells[7].ToolTipText = "Số lượng tồn của đầu sách này nhỏ hơn " + slton + " nên không thể bán";
                        MessageBox.Show("Đầu sách bạn vừa chọn còn dưới " + slton + " cuốn, không thể bán. Vui lòng chọn đầu sách khác!!!");
                    }
                    else
                    {
                        dtgv_HienThiSach.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
                        dtgv_HienThiSach.Rows[e.RowIndex].Cells[7].ReadOnly = false;
                        dtgv_HienThiSach.Rows[e.RowIndex].Cells[7].ToolTipText = "Nhập số lượng sách cần bán";
                        //Nạp số lượng có thể bán cho combobox số lượngs
                        DataGridViewComboBoxCell cbsoluong = (DataGridViewComboBoxCell)dtgv_HienThiSach.Rows[e.RowIndex].Cells[7];
                        cbsoluong.Items.Clear();
                        for (int i = 1; i <= sach.SoLuongTon - slton; i++)
                        {
                            cbsoluong.Items.Add(i + "");
                        }
                    }
                }
                

            }
            else if (e.ColumnIndex == 7 && e.RowIndex >= 0)
            {
                DataGridViewComboBoxCell cbsoluong = (DataGridViewComboBoxCell)dtgv_HienThiSach.Rows[e.RowIndex].Cells[7];
                if (cbsoluong.Value != null)
                    dtgv_HienThiSach.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
            }
            KTLoi();
        }

        private void btn_HoaDonMoi_Click(object sender, EventArgs e)
        {
            ArrayList arr = KhachHangBUS.LayDanhSach();
            KhachHangDTO kh = new KhachHangDTO();
            kh.MaKhachHang = " <Chọn khách hàng> ";
            arr.Insert(0, kh);
            cb_MaKhachHang.DataSource = arr;
            cb_MaKhachHang.DisplayMember = "MaKhachHang";
            cb_MaKhachHang.ValueMember = "MaKhachHang";

            hoadon = new HoaDonDTO();
            btn_CapNgat.Enabled = false;
            btn_XoaHoaDon.Enabled = false;
            cb_MaKhachHang.Enabled = true;
            dtgv_HienThiSach.Rows.Clear();
            txt_SoTienNo.Text = "";
            txt_HoTen.Text = "";
        }

        private void dtgv_HienThiSach_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (cb_MaKhachHang.SelectedIndex == 0)
            {
                MessageBox.Show("Vui lòng chọn khách Hàng cần bán");
                this.MaSach.ReadOnly = true;
                this.SoLuong.ReadOnly = true;
            }
            else
            {
                this.MaSach.ReadOnly = false;
                this.SoLuong.ReadOnly = false;
            }
        }

        private void dtgv_HienThiSach_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
        {
            /*if (MessageBox.Show("Bạn có thật sự muốn xóa?", "Quản lý nhà sách", MessageBoxButtons.YesNo) == DialogResult.No)
                e. = true;*/
        }

        private void btn_XoaHoaDon_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có thật sự muốn xóa?", "Quản lý nhà sách", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {

                // Xóa chi tiết hóa đơn
                for (int i = 0; i < dtgv_HienThiSach.RowCount - 1; i++)
                {
                    //Trường hợp đã insert vào csdl
                    if (dtgv_HienThiSach.Rows[i].Cells[8].Value != null)
                    {
                        //Cập nhật số lượng bán
                        ChiTietHoaDonDTO cthd = (ChiTietHoaDonDTO)dtgv_HienThiSach.Rows[i].Cells[8].Value;
                        //Lây so lượng bán cũ
                        int slBanCu = cthd.SoLuongBan;

                        //Tien cu
                        float tienCu = cthd.DonGiaBan * cthd.SoLuongBan;

                        SachDTO sach = SachBUS.LayThongTinSach(cthd.Sach.MaSach);

                        //Xóa chi tiết phiếu nhập
                        ChiTietHoaDonBUS.Xoa(cthd.MaChiTietHoaDon);
                        // Cập nhật số lượng tồn mới của sách
                        SachBUS.CapNhatSoLuongTon(sach.MaSach, (sach.SoLuongTon + slBanCu));

                        //Cập nhật số tiền nợ mới
                        KhachHangDTO khmoi = KhachHangBUS.LayThongTinKhachHang(hoadon.KhachHang.MaKhachHang);
                        KhachHangBUS.CapNhatSoTienNo(hoadon.KhachHang.MaKhachHang, khmoi.TienNo - tienCu);

                    }
                    //else //Trường hợp chưa được lưu xuống csdl
                    //{
                    //}
                }
                dtgv_HienThiSach.Rows.Clear();
                HoaDonBUS.Xoa(hoadon.MaHoaDon);
                MessageBox.Show("Xóa hóa đơn thành công", "Quản lý nhà sách");
                btn_XoaHoaDon.Enabled = false;
                btn_CapNgat.Enabled = false;
                KTLoi();

            }
        }

        private void btn_CapNgat_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dtgv_HienThiSach.RowCount - 1; i++)
            {
                //Trường hợp cập nhật
                if (dtgv_HienThiSach.Rows[i].Cells[8].Value != null)
                {
                    //Cập nhật khách hàng nếu đổi
                    hoadon.KhachHang = (KhachHangDTO)cb_MaKhachHang.SelectedItem;
                    HoaDonBUS.CapNhat(hoadon);

                    //Cập nhật số lượng bán mới
                    ChiTietHoaDonDTO cthd = (ChiTietHoaDonDTO)dtgv_HienThiSach.Rows[i].Cells[8].Value;
                    //Lây so lượng bán mới
                    int slBanCu = cthd.SoLuongBan;

                    //Tien cu
                    float tienCu = cthd.DonGiaBan * cthd.SoLuongBan;

                    cthd.HoaDon = hoadon;
                    cthd.TrangThai = 1;
                    cthd.SoLuongBan = Convert.ToInt32(dtgv_HienThiSach.Rows[i].Cells[7].Value);
                    ChiTietHoaDonBUS.CapNhat(cthd);
                    //Cập nhật cthd vào grid
                    dtgv_HienThiSach.Rows[i].Cells[8].Value = cthd;

                    // Cập nhật số lượng tồn mới của khách
                    SachDTO sach = SachBUS.LayThongTinSach(cthd.Sach.MaSach);
                    SachBUS.CapNhatSoLuongTon(sach.MaSach, (sach.SoLuongTon + (slBanCu - cthd.SoLuongBan)));

                    //Cập nhật số tiền nợ mới
                    KhachHangDTO khmoi = KhachHangBUS.LayThongTinKhachHang(hoadon.KhachHang.MaKhachHang);
                    KhachHangBUS.CapNhatSoTienNo(hoadon.KhachHang.MaKhachHang, khmoi.TienNo - tienCu + (cthd.SoLuongBan * cthd.DonGiaBan));

                }
                else //Trường hợp thêm chi tiết phiếu nhập
                {
                    //Cập nhật khách hàng nếu đổi
                    hoadon.KhachHang = (KhachHangDTO)cb_MaKhachHang.SelectedItem;
                    HoaDonBUS.CapNhat(hoadon);
                    ChiTietHoaDonDTO cthd = new ChiTietHoaDonDTO();
                    cthd.HoaDon = hoadon;
                    cthd.MaChiTietHoaDon = "CTHD" + DateTime.Now.Ticks;
                    SachDTO sach = SachBUS.LayThongTinSach(dtgv_HienThiSach.Rows[i].Cells[1].Value.ToString());
                    cthd.Sach = sach;
                    cthd.SoLuongBan = Convert.ToInt32(dtgv_HienThiSach.Rows[i].Cells[7].Value);
                    cthd.TrangThai = 1;
                    cthd.DonGiaBan = sach.DonGiaBan;
                    ChiTietHoaDonBUS.ThemChiTietHoaDon(cthd);
                    //Cập nhật idcthd vào grid
                    dtgv_HienThiSach.Rows[i].Cells[8].Value = cthd;
                    // Cập nhật số lượng tồn mới của khách
                    SachBUS.CapNhatSoLuongTon(sach.MaSach, (sach.SoLuongTon - cthd.SoLuongBan));

                    //Cập nhật số tiền nợ mới
                    KhachHangDTO khmoi = KhachHangBUS.LayThongTinKhachHang(hoadon.KhachHang.MaKhachHang);
                    KhachHangBUS.CapNhatSoTienNo(hoadon.KhachHang.MaKhachHang, khmoi.TienNo + (cthd.SoLuongBan * cthd.DonGiaBan));
                }

            }
            MessageBox.Show("Cập nhật thành công", "Quản lý nhà sách");
        }

        private void btn_TimHoaDon_Click(object sender, EventArgs e)
        {

        }

        private void btn_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }
}
